<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Microsoft.Cci.ILToCodeModel</name>
    </assembly>
    <members>
        <member name="M:Microsoft.Cci.ILToCodeModel.PatternDecompiler.ReplaceShortCircuitPattern(System.Collections.Generic.List{Microsoft.Cci.IStatement},System.Int32)">
            <summary>
            Finds the following pattern:
            i   :  c ? A : B; // either A or B must be an empty statement and the other is "goto L1;"
            i+1 :  push x;
            i+2 :  goto L2;
            i+3 :  Block1
                   0  : L1;
                   1  : push y;
                   2  : Block2
                        0 : L2;
                        1 : (rest of statements in Block2)
                        
            Transforms it into:
            i   : push d ? X : Y;
            i+1 : (rest of statements in Block2)
            
            Where if A is the empty statement, then
              d == c, X == x, Y == y
            If B is the empty statement, then if y is zero,
              d == !c, X == x, Y == y
            If B is the empty statement, then if y is not zero,
              d == c, X == y, Y == x
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.PatternDecompiler.ReplaceShortCircuitPatternCreatedByCCI2(System.Collections.Generic.List{Microsoft.Cci.IStatement},System.Int32)">
            <summary>
            Finds the following pattern:
            i   :  c ? A : B; // either A or B must be an empty statement and the other is "goto L1;"
            i+1 :  push x;
            i+2 :  goto L2;
            i+3 :  Block1
                   0  : L1;
                   1  : push y;
                   2  : goto L2;
                   3  : Block2
                        0 : whatever (but presumably it is the label L2)
                        
            Transforms it into:
            i   : push d ? X : Y;
            i+1 : goto L1;
            i+2 : Block 2
            
            Where if A is the empty statement,
              d == c, X == x, Y == y
            If B is the empty statement and y is zero
              d == !c, X == x, Y == y
            If B is the empty statement and y is not zero
              d == c, X == y, Y == x
            And Block1 is deleted from the list.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.ContractHelper">
            <summary>
            Helper class for performing common tasks on mutable contracts
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.AddTypeContract(Microsoft.Cci.Contracts.TypeContract,Microsoft.Cci.Contracts.ITypeContract)">
            <summary>
            Accumulates all elements from <paramref name="sourceContract"/> into <paramref name="targetContract"/>
            </summary>
            <param name="targetContract">Contract which is target of accumulator</param>
            <param name="sourceContract">Contract which is source of accumulator</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.UninstantiateAndUnspecialize(Microsoft.Cci.IMethodReference)">
            <summary>
            
            </summary>
            <param name="method"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.Unspecialized(Microsoft.Cci.ITypeReference)">
            <summary>
            
            </summary>
            <param name="type"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.GetTypeDefinitionFromAttribute(Microsoft.Cci.ITypeDefinition,System.String)">
            <summary>
            Returns a type definition for a type referenced in a custom attribute.
            </summary>
            <param name="typeDefinition">The type definition whose attributes will be searched</param>
            <param name="attributeName">Name of the attribute.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.GetMethodFromContractClass(Microsoft.Cci.IMethodDefinition)">
            <summary>
            Given an abstract method (i.e., either an interface method, J.M, or else
            an abstract method M, see if its defining type is marked with the
            [ContractClass(typeof(T))] attribute. If so, then return T.J.M, if the defining
            type is an interface, or T.M if T is an abstract class, otherwise null.
            (Note: in the interface case, T must explicitly implement J.M, not implicitly!!!
            </summary>
            <param name="methodDefinition"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.GetAbstractMethodForContractMethod(Microsoft.Cci.IMethodDefinition)">
            <summary>
            Given an method, M, see if it is declared in a type that is holding a contract class, i.e.,
            it will be marked with [ContractClassFor(typeof(T))]. If so, then return T.M, else null.
            </summary>
            <param name="methodDefinition"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.GetInvariantMethod(Microsoft.Cci.ITypeDefinition)">
            <summary>
            Returns the first method found in <paramref name="typeDefinition"/> containing an instance of 
            an attribute with the name "ContractInvariantMethodAttribute", if it exists.
            </summary>
            <param name="typeDefinition">The type whose members will be searched</param>
            <returns>May return null if not found</returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.CreateTypeReference(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IAssemblyReference,System.String)">
            <summary>
            Creates a type reference anchored in the given assembly reference and whose names are relative to the given host.
            When the type name has periods in it, a structured reference with nested namespaces is created.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.IsContractClass(Microsoft.Cci.IMetadataHost,Microsoft.Cci.ITypeDefinition)">
            <summary>
            Returns true iff the type definition is a contract class for an interface or abstract class.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractHelper.IsInvariantMethod(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IMethodDefinition)">
            <summary>
            Returns true iff the method definition is an invariant method.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment">
            <summary>
            An IContractAwareHost which automatically loads reference assemblies and attaches
            a (code-contract aware, aggregating) lazy contract provider to each unit it loads.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.#ctor">
            <summary>
            Allocates an object that can be used as an IMetadataHost which automatically loads reference assemblies and attaches
            a (lazy) contract provider to each unit it loads.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.#ctor(System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Allocates an object that can be used as an IMetadataHost which automatically loads reference assemblies and attaches
            a (lazy) contract provider to each unit it loads.
            </summary>
            <param name="searchPaths">
            Initial value for the set of search paths to use.
            </param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.#ctor(System.Collections.Generic.IEnumerable{System.String},System.Boolean)">
            <summary>
            Allocates an object that can be used as an IMetadataHost which automatically loads reference assemblies and attaches
            a (lazy) contract provider to each unit it loads.
            </summary>
            <param name="searchPaths">
            Initial value for the set of search paths to use.
            </param>
            <param name="searchInGAC">
            Whether the GAC (Global Assembly Cache) should be searched when resolving references.
            </param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.#ctor(Microsoft.Cci.INameTable)">
            <summary>
            Allocates an object that provides an abstraction over the application hosting compilers based on this framework.
            </summary>
            <param name="nameTable">
            A collection of IName instances that represent names that are commonly used during compilation.
            This is a provided as a parameter to the host environment in order to allow more than one host
            environment to co-exist while agreeing on how to map strings to IName instances.
            </param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.#ctor(Microsoft.Cci.INameTable,System.Byte)">
            <summary>
            Allocates an object that provides an abstraction over the application hosting compilers based on this framework.
            </summary>
            <param name="nameTable">
            A collection of IName instances that represent names that are commonly used during compilation.
            This is a provided as a parameter to the host environment in order to allow more than one host
            environment to co-exist while agreeing on how to map strings to IName instances.
            </param>
            <param name="pointerSize">The size of a pointer on the runtime that is the target of the metadata units to be loaded
            into this metadta host. This parameter only matters if the host application wants to work out what the exact layout
            of a struct will be on the target runtime. The framework uses this value in methods such as TypeHelper.SizeOfType and
            TypeHelper.TypeAlignment. If the host application does not care about the pointer size it can provide 0 as the value
            of this parameter. In that case, the first reference to IMetadataHost.PointerSize will probe the list of loaded assemblies
            to find an assembly that either requires 32 bit pointers or 64 bit pointers. If no such assembly is found, the default is 32 bit pointers.
            </param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.GetContractProvider(Microsoft.Cci.UnitIdentity)">
            <summary>
            If a unit has been loaded with this host, then it will have attached a (lazy) contract provider to that unit.
            This method returns that contract provider. If the unit has not been loaded by this host, then null is returned.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.RegisterContractProviderCallback(Microsoft.Cci.Contracts.IContractProviderCallback)">
            <summary>
            The host will register this callback with each contract provider it creates.
            </summary>
            <param name="contractProviderCallback"></param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.LoadUnitFrom(System.String)">
            <summary>
            Returns the unit that is stored at the given location, or a dummy unit if no unit exists at that location or if the unit at that location is not accessible.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractAwareHostEnvironment.IsContractReferenceAssembly(Microsoft.Cci.IUnit)">
            <summary>
            Indicates when the unit is marked with the assembly-level attribute [System.Diagnostics.Contracts.ContractReferenceAssembly]
            where that attribute type is defined in the unit itself.
            </summary>
            <param name="unit"></param>
            <returns></returns>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.CompilationArtifactRemover.GetTypeFromHandle">
            <summary>
            A reference to System.Type.GetTypeFromHandle(System.Runtime.TypeHandle).
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider">
            <summary>
            A contract provider that layers on top of an existing contract provider and which
            takes into account the way contracts for abstract methods are represented
            when IL uses the Code Contracts library. Namely, the containing type of an abstract method has an
            attribute that points to a class of proxy methods which hold the contracts for the corresponding
            abstract method.
            This provider wraps an existing non-code-contracts-aware provider and caches to avoid recomputing
            whether a contract exists or not.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.host">
            <summary>
            needed to be able to map the contracts from a contract class proxy method to an abstract method
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.underlyingContractProvider">
            <summary>
            The (non-aware) provider that was used to extract the contracts from the IL.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.contractProviderCache">
            <summary>
            Used just to cache results to that the underlyingContractProvider doesn't have to get asked
            more than once.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.#ctor(Microsoft.Cci.IMetadataHost,Microsoft.Cci.Contracts.IContractExtractor)">
            <summary>
            Creates a contract provider which is aware of how abstract methods have their contracts encoded.
            </summary>
            <param name="host">
            The host that was used to load the unit for which the <paramref name="underlyingContractProvider"/>
            is a provider for.
            </param>
            <param name="underlyingContractProvider">
            The (non-aware) provider that was used to extract the contracts from the IL.
            </param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.GetLoopContractFor(System.Object)">
            <summary>
            Returns the loop contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="loop">An object that might have been associated with a loop contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.GetMethodContractFor(System.Object)">
            <summary>
            Returns the method contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="method">An object that might have been associated with a method contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.GetTriggersFor(System.Object)">
            <summary>
            Returns the triggers, if any, that have been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="quantifier">An object that might have been associated with triggers. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.GetTypeContractFor(System.Object)">
            <summary>
            Returns the type contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="type">An object that might have been associated with a type contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.RegisterContractProviderCallback(Microsoft.Cci.Contracts.IContractProviderCallback)">
            <summary>
            Delegate callback to underlying contract extractor.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.ContractMethods">
            <summary>
            A collection of methods that can be called in a way that provides tools with information about contracts.
            </summary>
            <value></value>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.CodeContractsContractProvider.Unit">
            <summary>
            The unit that this is a contract provider for. Intentional design:
            no provider works on more than one unit.
            </summary>
            <value></value>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.LazyContractProvider">
            <summary>
            A contract provider that can be used to get contracts from a unit by querying in
            a random-access manner. That is, the unit is *not* traversed eagerly.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.LazyContractProvider.underlyingContractProvider">
            <summary>
            Needed because the decompiler requires the concrete class ContractProvider
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.LazyContractProvider.host">
            <summary>
            needed to pass to decompiler
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.LazyContractProvider.pdbReader">
            <summary>
            needed to pass to decompiler
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.LazyContractProvider.callbacks">
            <summary>
            Objects interested in getting the method body after extraction.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.#ctor(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IUnit,Microsoft.Cci.Contracts.IContractMethods)">
            <summary>
            Allocates an object that can be used to query for contracts by asking questions about specific methods/types, etc.
            </summary>
            <param name="host">The host that loaded the unit for which this is to be a contract provider.</param>
            <param name="unit">The unit to retrieve the contracts from.</param>
            <param name="contractMethods">A collection of methods that can be called in a way that provides tools with information about contracts.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.Dispose">
            <summary>
            Disposes the PdbReader object, if any, that is used to obtain the source text locations corresponding to contracts.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.Finalize">
            <summary>
            Disposes the PdbReader object, if any, that is used to obtain the source text locations corresponding to contracts.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.GetLoopContractFor(System.Object)">
            <summary>
            Returns the loop contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="loop">An object that might have been associated with a loop contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.GetMethodContractFor(System.Object)">
            <summary>
            Returns the method contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="method">An object that might have been associated with a method contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.GetTriggersFor(System.Object)">
            <summary>
            Returns the triggers, if any, that have been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="quantifier">An object that might have been associated with triggers. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.GetTypeContractFor(System.Object)">
            <summary>
            Returns the type contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="type">An object that might have been associated with a type contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LazyContractProvider.RegisterContractProviderCallback(Microsoft.Cci.Contracts.IContractProviderCallback)">
            <summary>
            After the callback has been registered, when a contract is extracted
            from a method, the callback will be notified.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.LazyContractProvider.Unit">
            <summary>
            The unit that this is a contract provider for. Intentional design:
            no provider works on more than one unit.
            </summary>
            <value></value>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.LazyContractProvider.Host">
            <summary>
            Gets the host.
            </summary>
            <value>The host.</value>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.LazyContractProvider.ContractMethods">
            <summary>
            A collection of methods that can be called in a way that provides tools with information about contracts.
            </summary>
            <value></value>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.MethodMapper">
            <summary>
            Not used for now.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.MappingMutator">
            <summary>
            A mutator that changes all references defined in one unit into being
            references defined in another unit.
            It does so by substituting the target unit's identity for the source
            unit's identity whenever it visits a unit reference.
            Other than that, it overrides all visit methods that visit things which could be either
            a reference or a definition. The base class does *not* visit definitions
            when they are being seen as references because it assumes that the definitions
            will get visited during a top-down visit of the unit. But this visitor can
            be used on just small snippets of trees. A side effect is that all definitions
            are replaced by references so it doesn't preserve that aspect of the object model.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MappingMutator.#ctor(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IUnit,Microsoft.Cci.IUnit)">
            <summary>
            A mutator that, when it visits anything, converts any references defined in the <paramref name="sourceUnit"/>
            into references defined in the <paramref name="targetUnit"/>
            </summary>
            <param name="host">
            The host that loaded the <paramref name="targetUnit"/>
            </param>
            <param name="targetUnit">
            The unit to which all references in the <paramref name="sourceUnit"/>
            will mapped.
            </param>
            <param name="sourceUnit">
            The unit from which references will be mapped into references from the <paramref name="targetUnit"/>
            </param>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider">
            <summary>
            A contract provider that serves up the union of the contracts found from a set of contract providers.
            One provider is the primary provider: all contracts retrieved from this contract provider are expressed
            in terms of the types/members as defined by that provider. Optionally, a set of secondary providers
            are used to query for contracts on equivalent methods/types: any contracts found are transformed into
            being contracts expressed over the types/members as defined by the primary provider and additively
            merged into the contracts from the primary provider.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.#ctor(Microsoft.Cci.IMetadataHost,Microsoft.Cci.Contracts.IContractExtractor,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{Microsoft.Cci.Contracts.IContractProvider,Microsoft.Cci.IMetadataHost}})">
            <summary>
            The constructor for creating an aggregating provider.
            </summary>
            <param name="host">This is the host that loaded the unit for which the <paramref name="primaryProvider"/> is
            the provider for.
            </param>
            <param name="primaryProvider">
            The provider that will be used to define the types/members of things referred to in contracts.
            </param>
            <param name="oobProvidersAndHosts">
            These are optional. If non-null, then it must be a finite sequence of pairs: each pair is a contract provider
            and the host that loaded the unit for which it is a provider.
            </param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.Dispose">
            <summary>
            Disposes any constituent contract providers that implement the IDisposable interface.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.Finalize">
            <summary>
            Disposes any constituent contract providers that implement the IDisposable interface. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.GetLoopContractFor(System.Object)">
            <summary>
            Returns the loop contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="loop">An object that might have been associated with a loop contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.GetMethodContractFor(System.Object)">
            <summary>
            Returns the method contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="method">An object that might have been associated with a method contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.GetTriggersFor(System.Object)">
            <summary>
            Returns the triggers, if any, that have been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="quantifier">An object that might have been associated with triggers. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.GetTypeContractFor(System.Object)">
            <summary>
            Returns the type contract, if any, that has been associated with the given object. Returns null if no association exits.
            </summary>
            <param name="type">An object that might have been associated with a type contract. This can be any kind of object.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.RegisterContractProviderCallback(Microsoft.Cci.Contracts.IContractProviderCallback)">
            <summary>
            Delegate to the primary provider
            </summary>
            <param name="contractProviderCallback"></param>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.ContractMethods">
            <summary>
            A collection of methods that can be called in a way that provides tools with information about contracts.
            </summary>
            <value></value>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.AggregatingContractProvider.Unit">
            <summary>
            The unit that this is a contract provider for. Intentional design:
            no provider works on more than one unit.
            </summary>
            <value></value>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.SourceMethodBody">
            <summary>
            A metadata (IL) representation along with a source level representation of the body of a method or of a property/event accessor.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.SourceMethodBody.#ctor(Microsoft.Cci.IMethodBody,Microsoft.Cci.IMetadataHost,Microsoft.Cci.ISourceLocationProvider,Microsoft.Cci.ILocalScopeProvider,Microsoft.Cci.Contracts.ContractProvider)">
            <summary>
            Allocates a metadata (IL) representation along with a source level representation of the body of a method or of a property/event accessor.
            </summary>
            <param name="ilMethodBody">A method body whose IL operations should be decompiled into a block of statements that will be the
            result of the Block property of the resulting source method body.</param>
            <param name="host">An object representing the application that is hosting the converter. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="sourceLocationProvider">An object that can map some kinds of ILocation objects to IPrimarySourceLocation objects. May be null.</param>
            <param name="localScopeProvider">An object that can provide information about the local scopes of a method.</param>
            <param name="contractProvider">An object that associates contracts, such as preconditions and postconditions, with methods, types and loops.
            IL to check this contracts will be generated along with IL to evaluate the block of statements. May be null.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.SourceMethodBody.#ctor(Microsoft.Cci.IMethodBody,Microsoft.Cci.IMetadataHost,Microsoft.Cci.ISourceLocationProvider,Microsoft.Cci.ILocalScopeProvider,Microsoft.Cci.Contracts.ContractProvider,System.Boolean)">
            <summary>
            Allocates a metadata (IL) representation along with a source level representation of the body of a method or of a property/event accessor.
            </summary>
            <param name="ilMethodBody">A method body whose IL operations should be decompiled into a block of statements that will be the
            result of the Block property of the resulting source method body.</param>
            <param name="host">An object representing the application that is hosting the converter. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="sourceLocationProvider">An object that can map some kinds of ILocation objects to IPrimarySourceLocation objects. May be null.</param>
            <param name="localScopeProvider">An object that can provide information about the local scopes of a method.</param>
            <param name="contractProvider">An object that associates contracts, such as preconditions and postconditions, with methods, types and loops.
            IL to check this contracts will be generated along with IL to evaluate the block of statements. May be null.</param>
            <param name="contractsOnly">True if the new method body should only contain any contracts (pre or post conditions) that are
            embedded in the given method body.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.SourceMethodBody.Dispatch(Microsoft.Cci.IMetadataVisitor)">
            <summary>
            Calls the visitor.Visit(T) method where T is the most derived object model node interface type implemented by the concrete type
            of the object implementing IDoubleDispatcher. The dispatch method does not invoke Dispatch on any child objects. If child traversal
            is desired, the implementations of the Visit methods should do the subsequent dispatching.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.SourceMethodBody.FindClosureMoveNext(Microsoft.Cci.IBlockStatement)">
            <summary>
            For an iterator method, find the closure class' MoveNext method and return its body.
            </summary>
            <param name="iteratorIL">The body of the iterator method, decompiled from the ILs of the iterator body.</param>
            <returns>Dummy.MethodBody if <paramref name="iteratorIL"/> does not fit into the code pattern of an iterator method, 
            or the body of the MoveNext method of the corresponding closure class if it does.
            </returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.SourceMethodBody.Transform(Microsoft.Cci.ILToCodeModel.BasicBlock)">
            <summary>
            Perform different phases approppriate for normal, MoveNext, or iterator source method bodies.
            </summary>
            <param name="rootBlock"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.SourceMethodBody.GetOrCreateBlock(System.UInt32,System.Boolean)">
            <summary>
            
            </summary>
            <param name="offset"></param>
            <param name="addLabel"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.SourceMethodBody.ParseInstruction(Microsoft.Cci.ILToCodeModel.BasicBlock)">
            <summary>
            Parse instructions and put them into an expression tree until an assignment, void call, branch target, or branch is encountered.
            Returns true if the parsed statement is last of the current basic block. This happens when the next statement is a branch
            target, or if the parsed statement could transfers control to anything but the following statement.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.SourceMethodBody.predecessors">
            <summary>
            Predecessors of labeled statements.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.Block">
            <summary>
            The collection of statements making up the body.
            This is produced by either language parser or through decompilation of the Instructions.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.OperationExceptionInformation">
            <summary>
            A list exception data within the method body IL.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.LocalsAreZeroed">
            <summary>
            True if the locals are initialized by zeroeing the stack upon method entry.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.LocalVariables">
            <summary>
            The local variables of the method.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.MethodDefinition">
            <summary>
            The definition of the method whose body this is.
            If this is the body of an event or property accessor, this will hold the corresponding adder/remover/setter or getter method.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.Operations">
            <summary>
            A list CLR IL operations that implement this method body.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.MaxStack">
            <summary>
            The maximum number of elements on the evaluation stack during the execution of the method.
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.SourceMethodBody.PrivateHelperTypes">
            <summary>
            Any types that are implicitly defined in order to implement the body semantics.
            In case of AST to instructions conversion this lists the types produced.
            In case of instructions to AST decompilation this should ideally be list of all types
            which are local to method.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.MoveNextSourceMethodBody">
            <summary>
            A metadata (IL) representation along with a source level representation of the body of an iterator method/property.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.MoveNextSourceMethodBody.iteratorMethodBody">
            <summary>
            The method body of the original iterator method. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextSourceMethodBody.#ctor(Microsoft.Cci.IMethodBody,Microsoft.Cci.IMethodBody,Microsoft.Cci.IMetadataHost,Microsoft.Cci.ISourceLocationProvider,Microsoft.Cci.ILocalScopeProvider,Microsoft.Cci.Contracts.ContractProvider)">
            <summary>
            Allocates a metadata (IL) representation along with a source level representation of the body of an iterator method/property/event accessor.
            </summary>
            <param name="iteratorMethodBody"> The method body of the iterator method, to which this MoveNextSourceMethodBody corresponds.</param>
            <param name="ilMethodBody">The method body of MoveNext whose IL operations should be decompiled into a block of statements that will be the
            result of the Block property of the resulting source method body. More importantly, the decompiled body for the original iterator method 
            is accessed by the TransformedBlock property.</param>
            <param name="host">An object representing the application that is hosting the converter. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="sourceLocationProvider">An object that can map some kinds of ILocation objects to IPrimarySourceLocation objects. May be null.</param>
            <param name="localScopeProvider">An object that can provide information about the local scopes of a method.</param>
            <param name="contractProvider">An object that associates contracts, such as preconditions and postconditions, with methods, types and loops.
            IL to check this contracts will be generated along with IL to evaluate the block of statements. May be null.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextSourceMethodBody.#ctor(Microsoft.Cci.IMethodBody,Microsoft.Cci.IMethodBody,Microsoft.Cci.IMetadataHost,Microsoft.Cci.ISourceLocationProvider,Microsoft.Cci.ILocalScopeProvider,Microsoft.Cci.Contracts.ContractProvider,System.Boolean)">
            <summary>
            Allocates a metadata (IL) representation along with a source level representation of the body of an iterator method/property-event accessor.
            </summary>
            <param name="iteratorMethodBody"> The method body of the iterator method, to which this MoveNextSourceMethodBody corresponds.</param>
            <param name="ilMethodBody">The method body of MoveNext whose IL operations should be decompiled into a block of statements that will be the
            result of the Block property of the resulting source method body. More importantly, the decompiled body for the original iterator method 
            is accessed by the TransformedBlock property.</param>
            <param name="host">An object representing the application that is hosting the converter. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="sourceLocationProvider">An object that can map some kinds of ILocation objects to IPrimarySourceLocation objects. May be null.</param>
            <param name="localScopeProvider">An object that can provide information about the local scopes of a method.</param>
            <param name="contractProvider">An object that associates contracts, such as preconditions and postconditions, with methods, types and loops.
            IL to check this contracts will be generated along with IL to evaluate the block of statements. May be null.</param>
            <param name="contractsOnly">True if the new method body should only contain any contracts (pre or post conditions) that are
            embedded in the given method body.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextSourceMethodBody.Transform(Microsoft.Cci.ILToCodeModel.BasicBlock)">
            <summary>
            Decompile the method body of the MoveNext, the results of which may be decompiled to and duplicated as the iterator method body.
            </summary>
            <param name="rootBlock">The root block of </param>
            <returns></returns>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.MoveNextSourceMethodBody.TransformedBlock">
            <summary>
            Computes the method body of the iterator method of which the defining class of this MoveNext method is a closure class.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.LinearCodeTraverser">
            <summary>
            Given a delegate that processes the element of a list at a given position, this traverser
            goes through a list of statements, which could be basic blocks, and processes the element in linear 
            order, that is, as if the list is flattened. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LinearCodeTraverser.Process(System.Collections.Generic.List{Microsoft.Cci.IStatement},System.Int32)">
            <summary>
            One step of processing the elements in a list in LinearCoderTraverser. Such a step, in addition to
            processing the element at the <paramref name="index"/> location in <paramref name="list"/>
            may move the index to reflect adding elements to or removing elements from the list 
            and may indicate whether whole list processing of the traverser should stop. 
            </summary>
            <param name="list">List of elements</param>
            <param name="index">In: position of element to be processed; out: position of the last processed element. </param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LinearCodeTraverser.Reset">
            <summary>
            Reset the stopLinearTraversal flag for the traverser to run again. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.LinearCodeTraverser.stopLinearTraversal">
            <summary>
            A flag that stops linear Traversal. When set to true, the linear traversal stops.  
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LinearCodeTraverser.Visit(Microsoft.Cci.IBlockStatement)">
            <summary>
            Visit every statement in the block, including those in the nested blocks. 
            </summary>
            <param name="block">block of statements, which themselves may be blocks.</param>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler">
            <summary>
            Decompilation of a MoveNext method into an iterator method. The structure of 
            a MoveNext method may contain:
            1) An optional try catch block, if the source iterator method has, for example, an foreach statement.
               We need to get rid of this try statement and decompile it back to foreach. Currently, we only remove
               this try statement.
            2) The body of the MoveNext is a switch statement testing the state field of the closure class.
               The state may be:
               a) An initial state, the handling of which contains most of the logic from the original
               iterator method. This part we are going to keep.
               b) One of the continuing states, the handling of which simply go to (may be through a series of 
               gotos) a label inside the handling of the initial state. (The label follows a location where a yield
               return should be.)
               c) A default (finishing) state, in which the control goes to a return false by the MoveNext.
               We need to remove the switch statement, the goto chains for the continuing state, and code to handle 
               finishing states. 
            3) Assignments to the current field of the closure, which is followed by a return true. These correspond 
               to a yield return. We should replace such sequence with yield return. 
            4) Return false, which should be replaced by yield break.
            5) Any other accesses of iterator class internals, whcih should be removed. These include calls to m__finally, assignments
               to state, current, and other fields that do not capture a variable in the iterator method.
            6) References to closure fields that captures a local or a parameter (including self), which ought to be replaced by 
               the captured variable.
            7) References to generic type parameter(s) of the closure class. These should be replaced by corresponding generic
               method parameters of the iterator method. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.containingType">
            <summary>
            The containing type of the MoveNext method, that is, the closure class. May be specialized.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.unspecializedContainingType">
            <summary>
            Unspecialized version of the containing type is used often. Keep a cached value here. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.#ctor(Microsoft.Cci.ITypeDefinition,Microsoft.Cci.IMetadataHost)">
            <summary>
            Decompile of a MoveNext method body and transform the result into the body of the original iterator method. 
            This involves the removal of the state machine, handling of possible compiled code for for-each, introducing
            yield returns and yield breaks, and tranforming the code to the context of the iterator method. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.Decompile(Microsoft.Cci.MutableCodeModel.BlockStatement)">
            <summary>
            Entry point of the decompiler: 
            1) Remove a TryCatchFinally statement in the MoveNext, if there is one.
            2) Remove the state machine, including control flow that tests states, returns from
            a state and reenters in another state.
            3) Replace return statements with approppriate yield return or yield breaks.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.RemovePossibleTryCatchBlock(Microsoft.Cci.MutableCodeModel.BlockStatement)">
            <summary>
            If the body of MoveNext has a try/catch block at the beginning inserted by compiler and the catch block contains
            a call to call this (the closure class).dispose, remove the try block. Also remove all the calls to m__finally. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.RemoveAssignmentsFromOrToThisDotState(Microsoft.Cci.MutableCodeModel.BlockStatement,Microsoft.Cci.ILocalDefinition@)">
            <summary>
            Remove any assignment to <code>this.&lt;&gt;?_state</code> and collect all the local variables that hold the
            value of the state field of the closure instance. 
            </summary>
            <param name="blockStatement">A BlockStatement representing the body of MoveNext.</param>
            <param name="thisDotStateLocal">Locals that hold the value of thisDotState</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.ReplaceReturnWithYield(Microsoft.Cci.MutableCodeModel.BlockStatement)">
            <summary>
            Replace every return true with yield return, and every return false with yield break. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.RemoveToplevelSwitch(Microsoft.Cci.MutableCodeModel.BlockStatement,Microsoft.Cci.ILocalDefinition)">
            <summary>
            Remove the switch statement, if any, on <code>this.&lt;&gt;?_state</code>
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.RemoveUnreferencedTempVariables(Microsoft.Cci.MutableCodeModel.BlockStatement)">
            <summary>
            Remove unreferenced locals. 
            </summary>
            <param name="blockStatement"></param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.IsClosureStateField(Microsoft.Cci.IFieldReference)">
            <summary>
            Test whether a field is the state field of the iterator closure.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.IsClosureCurrentField(Microsoft.Cci.IFieldReference)">
            <summary>
            Test whether a field is the current field of the iterator closure.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextDecompiler.IsZeroConstant(Microsoft.Cci.IExpression)">
            <summary>
            Test whether a constant is zero (as an int) or false (as a boolean). Return false for anything else. 
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer">
            <summary>
            An iterator method is compiled to a closure class with a MoveNext method. This class 
            substitutes every occurrance of a iterator closure type parameter with a method generic parameter and every reference 
            to this.field to the locals or parameters captured by the closure field.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.fieldMapping">
            <summary>
            A mapping from a closure field (a unique key of its name) to the local or parameter it captures.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.typeParameterMapping">
            <summary>
            A mapping from a type parameter of the closure class to a generic method parameter of the iterator method.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.unspecializedClosureType">
            <summary>
            Cached unspecialized version of the iterator closure. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.#ctor(System.Collections.Generic.Dictionary{Microsoft.Cci.IGenericTypeParameter,Microsoft.Cci.IGenericMethodParameter},System.Collections.Generic.Dictionary{System.Int32,System.Object},Microsoft.Cci.IMetadataHost,Microsoft.Cci.ITypeReference)">
            <summary>
            An iterator method is compiled to a closure class with a MoveNext method. This class 
            substitutes every occurrance of a type parameter with a method generic parameter and every reference 
            to this.field to the locals or parameters captured by the closure field.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.Transform(Microsoft.Cci.IMethodDefinition,Microsoft.Cci.IMethodDefinition,Microsoft.Cci.MutableCodeModel.BlockStatement,Microsoft.Cci.IMetadataHost)">
            <summary>
            Given method definitions of the original iterator method and the MoveNext Method, and the decompiled body of MoveNext, performs 
            the necessary substitution so that the method body becomes a legitimate, decompiled body of the iterator method.
            
            "decompiled MoveNext body" refers to the method body that has it state machine and TryCatchFinallyBlock removed, but references
            to closure fields remain. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.IsClosureType(Microsoft.Cci.ITypeReference)">
            <summary>
            Whether (the unspecialized version of) a type reference is equivalent to the (unspecialized version of) closure class. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.Visit(Microsoft.Cci.MutableCodeModel.AddressableExpression)">
            <summary>
            Replace reference to this.field by reference to corresponding local or parameter.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.Visit(Microsoft.Cci.MutableCodeModel.TargetExpression)">
            <summary>
            Replace the field binding in a target expression with an approppriate local or parameter.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.Visit(Microsoft.Cci.MutableCodeModel.BoundExpression)">
            <summary>
            Replace the field binding in a bound expression with an approppriate local or parameter.
            If the field is _this that captures this, replace the whole bound expression with the self
            of the original method. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.Visit(Microsoft.Cci.ITypeReference)">
            <summary>
            Replace type paramter with generic method parameter.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.GetGenericParameterMapping(Microsoft.Cci.IMethodDefinition,Microsoft.Cci.ITypeDefinition)">
            <summary>
            Get the mapping between the type parameters of the closure class and the generic method parameters of 
            the iterator methods, if any. The two have the same number of generic parameters.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.MoveNextToIteratorBlockTransformer.GetMapping(Microsoft.Cci.IMethodDefinition,Microsoft.Cci.IMethodDefinition)">
            <summary>
            The mapping from closure fields (their names) to the locals or parameters captured by the field. 
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.ClosureLocalVariableDeclarationAdder">
            <summary>
            Turn an assignment of create object instance into a local declaration so that closure decompilation can pick it up. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ClosureLocalVariableDeclarationAdder.#ctor(Microsoft.Cci.ILToCodeModel.MoveNextSourceMethodBody)">
            <summary>
            Turn an assignment of create object instance into a local declaration so that closure decompilation can pick it up. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ClosureLocalVariableDeclarationAdder.Visit(Microsoft.Cci.MutableCodeModel.BlockStatement)">
            <summary>
            Before visiting subnodes, add local declarations to the assignment to a local that creates a display class object. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ClosureLocalVariableDeclarationAdder.AddLocalDeclarationIfNecessary(System.Collections.Generic.List{Microsoft.Cci.IStatement})">
            <summary>
            Add a local declaration to the assignment to a local that creates a display class objects.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ClosureLocalVariableDeclarationAdder.IsCompilerGeneratedClass(Microsoft.Cci.ITypeReference)">
            <summary>
            Test to see if the type reference is to a compiler generated class. 
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.RemovePossibleTryCatchBlock">
            <summary>
            Helper class that try to remove try catch block associated with a foreach statement. 
            TODO: Decompile foreach statement
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemovePossibleTryCatchBlock.Visit(Microsoft.Cci.IBlockStatement)">
            <summary>
            See if the first statement (after local declarations) of a MoveNext method is a TryCatchFinally statement. 
            If so, remove the TryCatchFinally but copy its try body over. 
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.RemoveStateFieldAccessAndMFinallyCall">
            <summary>
            Helper class that:
            1) Removes assignments to this.&lt;&gt;__state,
            2) Collect local variables that hold the value of this.&lt;&gt;__state.
            3) Removes calls to the m__finally method.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.RemoveStateFieldAccessAndMFinallyCall.thisDotStateLocal">
            <summary>
            The local variable that holds the value of the state field of the iterator closure instance (self in movenext).
            We assume there is only one such local variable. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveStateFieldAccessAndMFinallyCall.#ctor(Microsoft.Cci.ILToCodeModel.MoveNextDecompiler)">
            <summary>
            Helper class that removes assignments to this.&lt;&gt;__state. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveStateFieldAccessAndMFinallyCall.Visit(Microsoft.Cci.IBlockStatement)">
            <summary>
            1) Removes assignments to this.&lt;&gt;__state,
            2) Collect local variables that hold the value of this.&lt;&gt;__state.
            3) Removes calls to the m__finally method.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.ProcessCurrentAndReturn">
            <summary>
            Helper class to:
            1) replace assignments to the current field with yield returns;
            2) replace return 0 with yield break;
            3) remember the labels right before return statements;
            4) remember the locals that hold the return value.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ProcessCurrentAndReturn.#ctor(Microsoft.Cci.ILToCodeModel.MoveNextDecompiler)">
            <summary>
            Helper class to:
            1) replace assignments to the current field with yield returns;
            2) replace return 0 with yield break;
            3) remember the labels right before return statements;
            4) remember the locals that hold the return value.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ProcessCurrentAndReturn.IsAssignmentToThisDotCurrent(Microsoft.Cci.IStatement,Microsoft.Cci.IExpression@)">
            <summary>
            Whether a statement is an assignment to the current field of the closure class. If so, out 
            parameter <paramref name="expression"/> is set to the source of the assignment. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.ProcessCurrentAndReturn.currentLabeledStatement">
            <summary>
            Remember the most recently seen labeled statement. We assume there is a label before a return 
            statement. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.ProcessCurrentAndReturn.returnLocals">
            <summary>
            Locals that holds the return value(s) of the method. This piece of information is later useful 
            in yield break inserter. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.ProcessCurrentAndReturn.labelBeforeReturn">
            <summary>
            Labels right before the return statement. Later on, this is used to match patterns like: 
            local:= true; goto L; ... L: return local;
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ProcessCurrentAndReturn.Process(System.Collections.Generic.List{Microsoft.Cci.IStatement},System.Int32)">
            <summary>
            1) replace assignments to the current field with yield returns;
            2) replace return 0 with yield break;
            3) remember the labels right before return statements;
            4) remember the locals that hold the return value.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.YieldBreakInserter">
            <summary>
            Helper class to replace assignments of false to return local with yield break and remove some unnecessary gotos. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.YieldBreakInserter.Process(System.Collections.Generic.List{Microsoft.Cci.IStatement},System.Int32)">
            <summary>
            Removes the gotoes to the label right before a return because it has become dead code after 
            the assignment of false to return local has been replaced by yield break and assignment to current
            has been replaced by yield return. 
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.RemoveGotoInIndirection">
            <summary>
            Traverse method body to collect gotos in a goto chain left after a switch statement has been deleted. A 
            goto chain is formed by indirection introduced by the decompilation of a switch statement. A typical goto-chain is like:
            
            case 1: goto L1;
             ...
            L1: ;
            goto State1Entry;
             ...
            // code for yield return;
            State1Entry;
            
            The end of the goto chain is at either a label like State1Entry, which points to a location after a yield return,
            a label that leads to a return, or the entrance of iterator method. All these gotos are introduced during the decompilation
            of the swtich statement for the MoveNext the state machine. 
            
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.RemoveGotoInIndirection.targetOfGotoFromSwitchCase">
            <summary>
            Set to a goto target when we hit the target label. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.RemoveGotoInIndirection.gotoFromSwitchCase">
            <summary>
            The current Goto statement for which we need to collect goto(s) in chain.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveGotoInIndirection.RemoveGotoStatements(Microsoft.Cci.IBlockStatement,Microsoft.Cci.IGotoStatement)">
            <summary>
            The main entry point of the class. It adds to input list <paramref name="toBeRemoved"/> the goto(s) in the goto chain. 
            The list is returned to highlight the side effect. 
            
            Currently we assume there is always one intermediate goto in the goto chain for a continuing state, and none
            for the default case.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveGotoInIndirection.Process(System.Collections.Generic.List{Microsoft.Cci.IStatement},System.Int32)">
            <summary>
            Given a gotoStatement, collect the next goto (the intermediate goto in the chain) and stop. See pattern
            above. Or if the current chain leads to the default case, nothing is collected.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.RemoveSwitchAndCollectGotos">
            <summary>
            Remove test on the state machine state. When such a test is by a switch statement, 
            collect goto statements in switch cases and remove the switch statement. It is assumed
            that when an iterator method contains only yield breaks, an if statement may be used
            in the test. It is always of the form:
            
            if (state !=0) {
            } else {
              //body of iterator method
            }
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.RemoveSwitchAndCollectGotos.localForThisDotState">
            <summary>
            Used for detecting whether whether thisdotstate is tested.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.RemoveSwitchAndCollectGotos.gotosFromSwitchCases">
            <summary>
            A list of goto statements from the switch cases. They are starting points of an goto indirection. Both these gotos and the gotos
            in the indirection should be removed. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveSwitchAndCollectGotos.#ctor(Microsoft.Cci.ILocalDefinition,System.Collections.Generic.List{Microsoft.Cci.IGotoStatement})">
            <summary>
            Collect goto statements in switch cases and remove the switch statement. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveSwitchAndCollectGotos.Visit(Microsoft.Cci.IBlockStatement)">
            <summary>
            Collect the gotos in the swiches cases. Visit toplevel blocks only. 
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.LocalReferencer">
            <summary>
            Find locals that are referenced in a piece of code traversed by an instance of the class.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LocalReferencer.Visit(Microsoft.Cci.IAddressableExpression)">
            <summary>
            Collect locals refered to in AddressableExpressions.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LocalReferencer.Visit(Microsoft.Cci.IBoundExpression)">
            <summary>
            Collect locals refered to in BoundExpressions.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.LocalReferencer.Visit(Microsoft.Cci.ITargetExpression)">
            <summary>
            Collect locals refered to in TargetExpressions
            </summary>
        </member>
        <member name="P:Microsoft.Cci.ILToCodeModel.LocalReferencer.ReferencedLocals">
            <summary>
            The collection of locals referenced in the code fragment(s) traversed by an instance of this class.
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.RemoveUnreferencedLocal">
            <summary>
            Helper class to remove unreferenced locals. Code review: why here? Similar functionality should be provided by any decompilation. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.RemoveUnreferencedLocal.referencedLocals">
            <summary>
            Locals that have been referenced.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveUnreferencedLocal.#ctor(System.Collections.Generic.List{Microsoft.Cci.ILocalDefinition})">
            <summary>
            Helper class to remove unreferenced locals. Code review: why here? Similar functionality should be provided by any decompilation. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveUnreferencedLocal.Visit(Microsoft.Cci.IBlockStatement)">
            <summary>
            Remove unreferenced locals. 
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.RemoveDummyStatements">
            <summary>
            Remove null statements from list of statements in a block. 
            
            This class is supposed to use with a linear code traverser that removes unwanted statements. The expectation is
            that the linear code traverser will nullify the unwanted statements and this class removes the null ones from 
            the statement list to avoid O(n^2) complexity.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveDummyStatements.Visit(Microsoft.Cci.IBlockStatement)">
            <summary>
            Remove all the null elements in a statement list. Time complexity is O(n). 
            </summary>
            <param name="block"></param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.Unstacker.Visit(Microsoft.Cci.MutableCodeModel.BlockStatement)">
            <summary>
            Visits the specified block statement.
            </summary>
            <param name="blockStatement">The block statement.</param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ContractExtractor.IsAssignmentToLocal(Microsoft.Cci.IStatement)">
            <summary>
            Returns true iff statement is "loc := e" or "loc[i] := e"
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.ContractExtractor.ScrubContractClass">
            <summary>
            When a class is used to express the contracts for an interface (or a third-party class)
            certain modifications must be made to the code in the contained contracts. For instance,
            if the contract class uses implicit interface implementations, then it might have a call
            to one of those implementations in a contract, Requires(this.P), for some boolean property
            P. That call has to be changed to be a call to the interface method.
            
            Note!! This modifies the contract class so that in the rewritten assembly it is defined
            differently than it was in the original assembly!!
            </summary>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.BasicBlock">
            <summary>
            A block of statements that can only be reached by branching to the first statement in the block.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.BasicBlock.#ctor(System.UInt32)">
            <summary>
            Allocates a block of statements that can only be reached by branching to the first statement in the block.
            </summary>
            <param name="startOffset">The IL offset of the first statement in the block.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.UnSpecializedMethods.UnSpecializedMethodDefinition(Microsoft.Cci.IMethodDefinition)">
            <summary>
            Get the unspecialized method definition is <paramref name="methodDefinition"/> is a specialized
            version, or itself otherwise. 
            </summary>
            <param name="methodDefinition"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.UnSpecializedMethods.AsUnSpecializedNestedTypeReference(Microsoft.Cci.ITypeReference)">
            <summary>
            Given a type reference <paramref name="typeReference"/>, convert it to an INestedTypeReference object if
            it is one, or if its unspecialized version is a INestedTypeReference. Otherwise return null. 
            </summary>
            <param name="typeReference"></param>
            <returns></returns>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.UnSpecializedMethods.AsUnSpecializedTypeReference(Microsoft.Cci.ITypeReference)">
            <summary>
            Given a type, if it is a specialized type, return its generic type. Otherwise return itself.
            </summary>
            <param name="typeReference"></param>
            <returns></returns>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.Decompiler">
            <summary>
            Provides methods that convert a given Metadata Model into an equivalent Code Model. 
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.Decompiler.GetCodeModelFromMetadataModel(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IAssembly,Microsoft.Cci.PdbReader)">
            <summary>
            Returns a mutable Code Model assembly that is equivalent to the given Metadata Model assembly,
            except that in the new assembly method bodies also implement ISourceMethodBody.
            </summary>
            <param name="host">An object representing the application that is hosting this decompiler. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="assembly">The root of the Metadata Model to be converted to a Code Model.</param>
            <param name="pdbReader">An object that can map offsets in an IL stream to source locations and block scopes. May be null.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.Decompiler.GetCodeAndContractModelFromMetadataModel(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IAssembly,Microsoft.Cci.PdbReader,Microsoft.Cci.Contracts.ContractProvider)">
            <summary>
            Returns a mutable Code Model assembly that is equivalent to the given Metadata Model assembly,
            except that in the new assembly method bodies also implement ISourceMethodBody.
            </summary>
            <param name="host">An object representing the application that is hosting this decompiler. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="assembly">The root of the Metadata Model to be converted to a Code Model.</param>
            <param name="pdbReader">An object that can map offsets in an IL stream to source locations and block scopes. May be null.</param>
            <param name="contractProvider">A mutable object that implements IContractProvider. Any code contracts discovered during decompilation are added to this object.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.Decompiler.GetCodeModelFromMetadataModel(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IModule,Microsoft.Cci.PdbReader)">
            <summary>
            Returns a mutable Code Model module that is equivalent to the given Metadata Model module,
            except that in the new module method bodies also implement ISourceMethodBody.
            </summary>
            <param name="host">An object representing the application that is hosting this decompiler. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="module">The root of the Metadata Model to be converted to a Code Model.</param>
            <param name="pdbReader">An object that can map offsets in an IL stream to source locations and block scopes. May be null.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.Decompiler.GetCodeAndContractModelFromMetadataModel(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IModule,Microsoft.Cci.PdbReader,Microsoft.Cci.Contracts.ContractProvider)">
            <summary>
            Returns a mutable Code Model module that is equivalent to the given Metadata Model module,
            except that in the new module method bodies also implement ISourceMethodBody.
            </summary>
            <param name="host">An object representing the application that is hosting this decompiler. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="module">The root of the Metadata Model to be converted to a Code Model.</param>
            <param name="pdbReader">An object that can map offsets in an IL stream to source locations and block scopes. May be null.</param>
            <param name="contractProvider">A mutable object that implements IContractProvider. Any code contracts discovered during decompilation are added to this object.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.Decompiler.GetCodeAndContractModelFromMetadataModelHelper(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IModule,Microsoft.Cci.ISourceLocationProvider,Microsoft.Cci.ILocalScopeProvider,Microsoft.Cci.Contracts.ContractProvider)">
            <summary>
            Returns a mutable Code Model module that is equivalent to the given Metadata Model module,
            except that in the new module method bodies also implement ISourceMethodBody.
            </summary>
            <param name="host">An object representing the application that is hosting this decompiler. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="module">The root of the Metadata Model to be converted to a Code Model.</param>
            <param name="sourceLocationProvider">An object that can map some kinds of ILocation objects to IPrimarySourceLocation objects. May be null.</param>
            <param name="localScopeProvider">An object that can provide information about the local scopes of a method. May be null.</param>
            <param name="contractProvider">A mutable object that implements IContractProvider. Any code contracts discovered during decompilation are added to this object. May be null.</param>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.ReplaceMetadataMethodBodiesWithDecompiledMethodBodies">
            <summary>
            A mutator that copies metadata models into mutable code models by using the base MetadataMutator class to make a mutable copy
            of a given metadata model and also replaces any method bodies with instances of SourceMethodBody, which implements the ISourceMethodBody.Block property
            by decompiling the metadata model information provided by the properties of IMethodBody.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.ReplaceMetadataMethodBodiesWithDecompiledMethodBodies.contractProvider">
            <summary>
            A mutable object that implements IContractProvider. Any code contracts discovered during decompilation are added to this object. May be null.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.ReplaceMetadataMethodBodiesWithDecompiledMethodBodies.localScopeProvider">
            <summary>
            An object that can provide information about the local scopes of a method. May be null. 
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.ReplaceMetadataMethodBodiesWithDecompiledMethodBodies.sourceLocationProvider">
            <summary>
            An object that can map offsets in an IL stream to source locations and block scopes. May be null.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ReplaceMetadataMethodBodiesWithDecompiledMethodBodies.#ctor(Microsoft.Cci.IMetadataHost,Microsoft.Cci.IUnit,Microsoft.Cci.ISourceLocationProvider,Microsoft.Cci.ILocalScopeProvider,Microsoft.Cci.Contracts.ContractProvider)">
            <summary>
            Allocates a mutator that copies metadata models into mutable code models by using the base MetadataMutator class to make a mutable copy
            of a given metadata model and also replaces any method bodies with instances of SourceMethodBody, which implements the ISourceMethodBody.Block property
            by decompiling the metadata model information provided by the properties of IMethodBody.
            </summary>
            <param name="host">An object representing the application that is hosting this mutator. It is used to obtain access to some global
            objects and services such as the shared name table and the table for interning references.</param>
            <param name="unit">The unit of metadata that will be mutated.</param>
            <param name="sourceLocationProvider">An object that can map some kinds of ILocation objects to IPrimarySourceLocation objects. May be null.</param>
            <param name="localScopeProvider">An object that can provide information about the local scopes of a method. May be null.</param>
            <param name="contractProvider">A mutable object that implements IContractProvider. Any code contracts discovered during decompilation are added to this object. May be null.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.ReplaceMetadataMethodBodiesWithDecompiledMethodBodies.Visit(Microsoft.Cci.IMethodBody)">
            <summary>
            Replaces the given method body with an equivalent instance of SourceMethod body, which in addition also implements ISourceMethodBody,
            which has the additional property, Block, which represents the corresponding Code Model for the method body.
            </summary>
            <param name="methodBody">The method body to visit.</param>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.HelperTypeFinder">
            <summary>
            A traverser that visits every method body and collects together all of the private helper types of these bodies.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.HelperTypeFinder.helperTypes">
            <summary>
            Contains an entry for every type that has been introduced by the compiler to hold the state of an anonymous delegate or of an iterator.
            Since decompilation re-introduces the anonymous delegates and iterators, these types should be removed from member lists.
            They stick around as PrivateHelperTypes of the methods containing the iterators and anonymous delegates.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.HelperTypeFinder.Visit(Microsoft.Cci.IModule)">
            <summary>
            Traverses only the namespace root of the given assembly, removing any type from the model that have the same
            interned key as one of the entries of this.typesToRemove.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.HelperTypeFinder.Visit(Microsoft.Cci.ITypeDefinition)">
            <summary>
            Visits the specified type definition, traversing only the nested types and methods and
            collecting together all of the private helper types that are introduced by the compiler
            when methods that contain closures or iterators are compiled.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.HelperTypeFinder.Visit(Microsoft.Cci.IMethodDefinition)">
            <summary>
            Visits only the (possibly missing) body of the method.
            </summary>
            <param name="method"></param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.HelperTypeFinder.Visit(Microsoft.Cci.IMethodBody)">
            <summary>
            Records all of the helper types of the method body into this.helperTypes.
            </summary>
            <param name="methodBody"></param>
        </member>
        <member name="T:Microsoft.Cci.ILToCodeModel.RemoveUnnecessaryTypes">
            <summary>
            A traverser for a mutable code model that removes a specified set of types from the model.
            </summary>
        </member>
        <member name="F:Microsoft.Cci.ILToCodeModel.RemoveUnnecessaryTypes.helperTypes">
            <summary>
            Contains an entry for every type that has been introduced by the compiler to hold the state of an anonymous delegate or of an iterator.
            Since decompilation re-introduces the anonymous delegates and iterators, these types should be removed from member lists.
            They stick around as PrivateHelperTypes of the methods containing the iterators and anonymous delegates.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveUnnecessaryTypes.#ctor(System.Collections.Generic.Dictionary{System.UInt32,Microsoft.Cci.ITypeDefinition})">
            <summary>
            Allocatates a traverser for a mutable code model that removes a specified set of types from the model.
            </summary>
            <param name="helperTypes">Dictionary whose keys are the interned keys of the types to remove from member lists.</param>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveUnnecessaryTypes.Visit(Microsoft.Cci.IModule)">
            <summary>
            Traverses only the namespace root of the given assembly, removing any type from the model that have the same
            interned key as one of the entries of this.typesToRemove.
            </summary>
        </member>
        <member name="M:Microsoft.Cci.ILToCodeModel.RemoveUnnecessaryTypes.Visit(Microsoft.Cci.ITypeDefinition)">
            <summary>
            Visits the specified type definition, removing any nested types that are compiler introduced private helper types
            for maintaining the state of closures and anonymous delegates.
            </summary>
        </member>
    </members>
</doc>
